// 订阅者模式
class Login {
  constructor(arg) { };
  // 回调函数
  handlers = {};
  // login数据
  loginData = null;

  /** 添加订阅者
   * @param {string} type  订阅的类型
   * @param {function} handler 订阅回掉
   */
  addEventListener(type, handler) {
    // 首先判断handlers内有没有type事件容器，没有则创建一个新数组容器
    if (!(type in this.handlers)) {
      this.handlers[type] = []
    };

    // 如果有loginData数据直接触发
    if (this.loginData) {
      handler(this.loginData);
    } else {
      // 将事件存入
      this.handlers[type].push(handler);
    };
  };

  // 触发事件两个参数（事件名，参数）
  dispatchEvent(type, params) {
    const vm = this;
    vm.loginData = params;
    // 若没有注册该事件则抛出错误
    if (!(type in vm.handlers)) {
      return new Error('未注册该事件');
    };
    
    // 便利触发
    vm.handlers[type].forEach((handler) => {
      handler(params);
    });
  }
}

export default Login;
